from functools import reduce

# map()方法的用法 接收两个参数，一个是函数，一个是Iterable
def f(x):
	return x * x

r = map(f,range(10))
print(list(r))

# 把这个list所有数字转为字符串：
s = list(map(str,range(10)))
print(s)

# reduce把一个函数作用在一个序列[x1, x2, x3, ...]上
# 使用reduce需要引用functools包
def add(x,y):
	return x + y
t = reduce(add,range(10))
print(t)

print(sum(range(11)))

def fn(x,y):
	return x*10 + y

print(reduce(fn,range(5)))

def char2num(s):
	return {'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9}[s]

def str2float(s):
	L=s.split('.')
	# print(L)
	# print("----")
	M = reduce(fn,list(map(char2num,L[0])))
	N = list(map(char2num,L[1]))
	print(M+reduce(fn,N)/10**len(N))

str2float("12123.64456")

print(reduce(fn,map(char2num,'24696')))

# 利用map()函数，把用户输入的不规范的英文名字，
# 变为首字母大写，其他小写的规范名字。
# 输入：['adam', 'LISA', 'barT']，输出：['Adam', 'Lisa', 'Bart']：
def normalize(name):
	return str.capitalize(name)

print(list(map(normalize,['hello','wOrld'])))

def mult(x,y):
	return x * y

def prod(L):
	return reduce(mult,L)
print(prod([1,2,3,4]))


